iT邦幫忙

2022 iThome 鐵人賽

DAY 5
2

可愛鯨魚

可愛鯨魚背著貨櫃游啊游~ 你知道 Kubernetes 是怎麼一次操控這麼多鯨魚的嗎?

圖片來源:Docker (@Docker) / Twitter

Control Plane & Worker Node

Control Plane 和 Worker Node 的 component 可以參考以下圖:
Control Plane & Worker Node
來源:Kubernetes Components | Kubernetes

大部分 component 可以選擇 直接在 system 上執行使用 pod 執行
只有 kubelet 一定要直接在 system 上執行,因為 kubelet 需要將其他 components 套入 pod 運行

可以用指令看看目前有哪些 pod 正在運行

kubectl get pod -A \
    -o custom-columns=POD:metadata.name,Node:spec.nodeName \
    --sort-by spec.nodeName

output... 可以看到不同的 components 正在使用 pod 執行

POD                             Node
coredns-565d847f94-lmbvb        whale1
coredns-565d847f94-m9877        whale1
etcd-whale1                     whale1
kube-apiserver-whale1           whale1
kube-controller-manager-whale1  whale1
kube-proxy-rwtc6                whale1
kube-scheduler-whale1           whale1
kube-proxy-t4dmt                whale2
kube-proxy-bn4dv                whale3

Control Plane (舊稱 Master Node)

Control Plane 做為整個 cluster 的頭頭,負責調度各 node 上的資源

多個 etcdapi 可以同時運行增加效率,但 schedulercontroller-manager 同時間只能啟用一個

接著就來看看裡面有哪些角色吧~

  • api.svg kube-apiserver: 行政窗口
    api 使用 RESTful API 提供其他 components 以 CRUD 方式存取 cluster 的狀態,也因此 api 需要處理來自各 components 的 request,如果覺得只有一個 api 的反應太慢可以多部署幾個做負載平衡

    大部分 request 都是由 components 先發起 api 接收,只有少部分是由 api 主動聯繫,如:kubectl 要求取得 logkubectl attach 運行中的 containerkubectl port-forward

    可以來試看看透過 api 查看健康度

    下面兩個指令效果是一樣的

    kubectl get --raw='/readyz?verbose'
    curl -k https://localhost:6443/livez?verbose
    

    output...

    [+]ping ok
    [+]log ok
    [+]etcd ok
    [+]etcd-readiness ok
    [+]informer-sync ok
    [+]poststarthook/start-kube-apiserver-admission-initializer ok
    [+]poststarthook/generic-apiserver-start-informers ok
    [+]poststarthook/priority-and-fairness-config-consumer ok
    [+]poststarthook/priority-and-fairness-filter ok
    [+]poststarthook/storage-object-count-tracker-hook ok
    [+]poststarthook/start-apiextensions-informers ok
    [+]poststarthook/start-apiextensions-controllers ok
    [+]poststarthook/crd-informer-synced ok
    [+]poststarthook/bootstrap-controller ok
    [+]poststarthook/rbac/bootstrap-roles ok
    [+]poststarthook/scheduling/bootstrap-system-priority-classes ok
    [+]poststarthook/priority-and-fairness-config-producer ok
    [+]poststarthook/start-cluster-authentication-info-controller ok
    [+]poststarthook/aggregator-reload-proxy-client-cert ok
    [+]poststarthook/start-kube-aggregator-informers ok
    [+]poststarthook/apiservice-registration-controller ok
    [+]poststarthook/apiservice-status-available-controller ok
    [+]poststarthook/kube-apiserver-autoregistration ok
    [+]autoregister-completion ok
    [+]poststarthook/apiservice-openapi-controller ok
    [+]poststarthook/apiservice-openapiv3-controller ok
    [+]shutdown ok
    readyz check passed
    
  • etcd.svg etcd: 資料儲存中心
    etcd 為 key-value 資料庫,Kubernets 用它來保存 cluster 的所有資料,只有 api 能存取到 etcd 的資料

    為什麼一定要讓 components 透過 api 才能寫入 etcd 呢?

    etcd 也是 CNCF (Cloud Native Computing Foundation) project

    如果是 生產環境 需要多配幾個 etcd 用來提升容錯率、提高機器穩定度,且建議配置奇數個 (關係到 etcd 內部機制,Raft 共識演算法)

    我目前是學習用所以暫時不配置,有興趣的朋友可以看看官方文檔怎麼進行設定的:Operating etcd clusters for Kubernetes | Kubernetes

  • sched.svg kube-scheduler: 決策中心
    負責決策要把 Pod 放在哪個 node

    來拆解這之中的工作項目

    1. Scheduler 透過 api watch mechanism 看看有沒有要建立的 pod
    2. Scheduler 透過 api 更新 Pod,為新建立的 Pod 判定要放置的 node
    3. api 再通知 kubelet 實際運行 Pod
  • c-m.svg kube-controller-manager: 管理部門
    scheduler 只能決策 Pod node,需要 controller-manager 確保實際狀態與預期狀態相符

    controller 依照監視的 resource 不同分成好幾種

    • Node controller
    • Job controller
    • Endpoints controller
    • Service Account & Token controllers
  • c-c-m.svg cloud-controller-manager
    上雲端用的,我沒有用到這個... 暫時沒有研究...


Worker Node (舊稱 Slave Node)

Worker Node 顧名思義就是負責運作的,負責維護 cluster 內部的 Pod

  • kubelet.svg kubelet: 維運小螺絲
    在每個 node 上控制鯨魚的核心,負責每個 Pod 實際運作

    • 將內部定義的 container 部署到 container runtime
    • 負責監測 container 健康度
  • k-proxy.svg kube-proxy: 小小窗口
    proxy server 能轉發流量,確保 cluster 內外對各個 node 上的 Pod 都能順暢溝通

    如果要更強大的控管內部網路功能,可能要尋求 Istio
    這部分我力有未逮無法詳細介紹,可以看看其他大大的文章

    這裡附上這屆其他選手的系列:
    學會 Kubernetes 然後呢?由 Istio 進入 DevOps 偉大航路

  • Container runtime
    主要運行 container 的軟體,目前 Kubernetes 支援原生的 containerd, CRI-O,也有其他透過 cri 實現的 (e.g. cri-dockerd + Docker)


Ref


components 後面的角色是我自己主觀定義的,定義有偏差請多多包涵~
今天的內容好像有點在K書... /images/emoticon/emoticon33.gif


上一篇
Day 4 — 我想要組可愛鯨魚艦隊~:建立 Cluster
下一篇
Day 6 — 怎麼剛下水就迷航了:Kubernetes + Docker install Troubleshooting
系列文
前端轉生~到了實驗室就要養幾隻可愛鯨魚:自架 Kubernetes 迷航日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言